//权限拦截在路由跳转的时候做 路由守卫
import router from '@/router'
import store from '@/store' //引入store实例，跟组件中的this.$store是一样的
import nProgress from 'nprogress' //引入进度条插件
import 'nprogress/nprogress.css' //引入进度条样式

//不需要导出，只需要让代码执行即可

//前置守卫
//next是前置守卫必须执行的钩子，next必须执行 如果不执行，页面就卡住了
//next() 放行
//next(false) 跳转终止
//next(地址) 重定向到某个地址
const wihteList = ['/login', '/404']
router.beforeEach(async (to, from, next) => {
  nProgress.start()
  if (store.getters.token) {
    //如果有token就进这里
    if (to.name === 'login') {
      //如果跳转的页面是登录页就免登录直接跳转至首页
      next({ name: 'Dashboard' })
    } else {
      if (!store.getters.userId) {
        await store.dispatch('user/getUserInfo')
        //这里写await的原因是因为actions里面的代码是异步代码，我们需要等待获取到数据之后再进行next()操作，如果还没有获取到数据就放行了，页面就会拿不到数据
      }
      //如果跳转的页面不是登录页则放行
      next()
    }
  } else {
    //没有token就进这里
    //先判断是否在白名单里面
    if (wihteList.includes(to.path)) {
      next() //跳转路径存在于白名单中则放行
    } else {
      //不存在则跳转至登录页
      next({ name: 'login' })
    }
  }
  nProgress.done()
})
//后置守卫
router.afterEach()
